﻿using BCCommon;
using BCCommon.TMS.Driver;
using BCDto.Sim.Admin.Admin;
using BCDto.TMS.Driver;
using BCDto.TMS.Driver.DriverCostReport;
using System;

namespace BCService.TMS.Driver.DriverCostReport
{
    public interface IDriverCostReportService
    {
        /// <summary>
        /// 司机上报一条费用信息
        /// </summary>
        /// <param name="currentDriver">当前司机</param>
        /// <param name="dto">费用信息</param>
        /// <returns></returns>
        DriverCostReportDto Add(DriverDto currentDriver, DriverCostReportDtoRequestDto dto);

        /// <summary>
        /// 分页获取司机上报费用类别
        /// </summary>
        /// <param name="companyId">公司Id</param>
        /// <param name="driverPhone">司机手机号</param> 
        /// <param name="vehicleNo">车牌号</param>
        /// <param name="orderNo">订单号</param>
        /// <param name="status">上报状态</param>
        /// <param name="costType">费用类型</param>
        /// <param name="start">上报开始时间</param>
        /// <param name="end">上报结束时间</param>
        /// <param name="ascending">是否升序排序</param>
        /// <param name="sortName">排序字段名</param>
        /// <param name="pageIndex">分页页码</param>
        /// <param name="pageSize">分页页数</param>
        /// <returns></returns>
        PageableList<DriverCostReportDto> GetList(long? companyId, string driverPhone, string vehicleNo, string orderNo, DriverCostReportStatus? status, DriverCostReportType? costType, DateTime? start, DateTime? end, bool? ascending, string sortName, int pageIndex, int pageSize);

        /// <summary>
        /// 获取指定的司机上报费用信息
        /// </summary>
        /// <param name="driverCostReportId">司机上报费用信息Id</param>
        /// <returns></returns>

        DriverCostReportDto GetByDriverCostReportId(long driverCostReportId);

        /// <summary>
        /// 司机费用上报信息审核
        /// </summary>
        /// <param name="admin">当前登录人员</param>
        /// <param name="driverCostReportId">费用上报Id</param>
        /// <param name="approveRequestDto">审核信息</param>
        /// <returns></returns>
        DriverCostReportDto Approve(AdminDto admin,long driverCostReportId, ApproveRequestDto approveRequestDto);

        /// <summary>
        /// 根据司机Id分页获取费用上报信息列表
        /// </summary>
        /// <param name="driverId">司机Id</param>
        /// <param name="costType">费用类型</param>
        /// <param name="pageIndex">分页页码</param>
        /// <param name="pageSize">分页页数</param>
        /// <returns></returns>
        PageableList<DriverCostReportDto> GetListByDriverIdAndCostType(long driverId, DriverCostReportType? costType, int pageIndex, int pageSize);
    }
}
